﻿/**
 *
 * @file   FITKAcousticsHDF5Object.h
 * @brief   HDF5数据对象
 * @author TanDongYang (tandongyang@diso.cn)
 * @date   2024-11-21
 *
 */

#ifndef FITKACOUSTICSHDF5OBJECT_H
#define FITKACOUSTICSHDF5OBJECT_H

#include "FITKAcousticsPostDataAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractNDataObject.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataManager.hpp"



namespace Acoustics
{
    class FITKAcousticsHDF5AttributeManager;
    class FITKAcousticsHDF5DataSetManager;
    class FITKAcousticsHDF5ObjectManager;

    /**
     * @brief   HDF5数据对象
     * @author  TanDongYang (tandongyang@diso.cn)
     * @date    2024-11-21 
     */
    class FITKAcousticsPostDataAPI FITKAcousticsHDF5Object :
        public Core::FITKAbstractNDataObject
    {
        FITKCLASS(Acoustics, FITKAcousticsHDF5Object);
    public:
        /**
         * @brief   Construct a new FITKAcousticsHDF5Object object
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        explicit FITKAcousticsHDF5Object();

        /**
         * @brief   Destroy the FITKAcousticsHDF5Object object
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        virtual ~FITKAcousticsHDF5Object();

        /**
         * @brief   获取属性管理器
         * @return  属性管理器对象
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5AttributeManager* getFITKAcousticsHDF5AttributeManager();

        /**
         * @brief   获取数据集管理器
         * @return  数据集管理器对象
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5DataSetManager* getFITKAcousticsHDF5DataSetManager();

        /**
         * @brief   获取子集管理器
         * @return  子集管理器对象
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5ObjectManager* getFITKAcousticsHDF5ObjectChildManager();

        /**
         * @brief   清空数据
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-22 
         */
        void clearData();

    private:

        /**
         * @brief   属性管理器
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5AttributeManager* _attrManager{};

        /**
         * @brief   数据集管理器
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5DataSetManager* _datasetManager{};

        /**
         * @brief   子集管理器
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-21 
         */
        FITKAcousticsHDF5ObjectManager* _childManager{};
    };


    /**
     * @brief   HDF5对象管理器
     * @author  TanDongYang (tandongyang@diso.cn)
     * @date    2024-11-21 
     */
    class FITKAcousticsPostDataAPI FITKAcousticsHDF5ObjectManager : public Core::FITKAbstractNDataObject
        , public Core::FITKAbstractDataManager<FITKAcousticsHDF5Object>
    {
        FITKCLASS(Acoustics, FITKAcousticsHDF5ObjectManager);
    public:
        explicit FITKAcousticsHDF5ObjectManager() = default;
        virtual ~FITKAcousticsHDF5ObjectManager() = default;
    };

}






#endif // FITKACOUSTICSHDF5OBJECT_H
